1743D - Problem with Random Tests - CodeForces Solution


brute force probabilities

Please click on ads to support us..

Python Code:

def getStr(i, k):
    ans = ''
    while i < n:
        if s[i] == '1' or s[k] == '1': ans += '1'
        else: ans += '0'
        i += 1
        k += 1
    return ans

n = int(input())
s = input()
i = 0
while i < n and s[i] == '0': i += 1
if i == n:
    print(0)
    exit()
j = i
while i < n and s[i] == '1': i += 1
ans = '0'*(n-i-j)
for k in range(i, j-1, -1):
    t = getStr(i, k)
    ans = max(ans, t)
print(s[j:i] + ans)

C++ Code:

#include <bits/stdc++.h>

using namespace std;

int main() {

	int n;
	string s;
	cin >> n >> s;

	int flag = 0;
	for (int i = 0; i < n; i ++ ) {
		if (s[i] == '1') {
			flag = 1;
			s = s.substr(i);
			break;
		}
	}

	if (!flag) {
		cout << "0\n";
		return 0;
	}

 	int idx = -1;
	for (int i = 0; i < s.size(); i ++ ) {
		if (s[i] == '0') {
			idx = i;
			break;
		}
	}

	if (idx == -1) {
		cout << s << endl;
		return 0;
	}

 	string res = s;
	for (int i = idx - 1; i >= 0; i -- ) {
		string sa = s.substr(i), sb = s.substr(idx);
		string tmp = s;
		for (int j = 0; j < sb.size(); j ++ ) {
			tmp[idx + j] = max(sa[j], sb[j]);
		}
  		res = max(res, tmp);
	}
	cout << res << endl;
	return 0;
}
	 		    	 	 	  	 	     		  	  	


Comments

Submit
0 Comments
More Questions

1108B - Divisors of Two Integers
1175A - From Hero to Zero
1141A - Game 23
1401B - Ternary Sequence
598A - Tricky Sum
519A - A and B and Chess
725B - Food on the Plane
154B - Colliders
127B - Canvas Frames
107B - Basketball Team
245A - System Administrator
698A - Vacations
1216B - Shooting
368B - Sereja and Suffixes
1665C - Tree Infection
1665D - GCD Guess
29A - Spit Problem
1097B - Petr and a Combination Lock
92A - Chips
1665B - Array Cloning Technique
1665A - GCD vs LCM
118D - Caesar's Legions
1598A - Computer Game
1605A - AM Deviation
1461A - String Generation
1585B - Array Eversion
1661C - Water the Trees
1459A - Red-Blue Shuffle
1661B - Getting Zero
1661A - Array Balancing